package com.zenithmind.library.service;

import com.zenithmind.common.result.Result;

/**
 * 图书库存服务接口
 * 遵循接口隔离原则：只包含库存管理相关的方法
 * 
 * @author ZenithMind
 * @since 2024-06-14
 */
public interface BookInventoryService {

    /**
     * 更新图书库存
     * 
     * @param bookId 图书ID
     * @param totalCopies 总库存
     * @param availableCopies 可借阅库存
     * @return 更新结果
     */
    Result<Void> updateBookStock(String bookId, Integer totalCopies, Integer availableCopies);

    /**
     * 借出图书（减少可借阅数量）
     * 
     * @param bookId 图书ID
     * @return 操作结果
     */
    Result<Void> borrowBook(String bookId);

    /**
     * 归还图书（增加可借阅数量）
     * 
     * @param bookId 图书ID
     * @return 操作结果
     */
    Result<Void> returnBook(String bookId);

    /**
     * 预约图书（减少可借阅数量，增加预约数量）
     * 
     * @param bookId 图书ID
     * @return 操作结果
     */
    Result<Void> reserveBook(String bookId);

    /**
     * 取消预约（增加可借阅数量，减少预约数量）
     * 
     * @param bookId 图书ID
     * @return 操作结果
     */
    Result<Void> cancelReservation(String bookId);

    /**
     * 检查图书库存是否充足
     * 
     * @param bookId 图书ID
     * @param requestedQuantity 请求数量
     * @return 是否充足
     */
    boolean isStockSufficient(String bookId, Integer requestedQuantity);

    /**
     * 获取图书可借阅数量
     * 
     * @param bookId 图书ID
     * @return 可借阅数量
     */
    Integer getAvailableCopies(String bookId);
}
